home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / overview / moreisbetter / mib-libraries / morecrc / morecrc.c next >
Encoding:
Text File  |  2000-06-23  |  6.2 KB  |  149 lines

  1. /*
  2.     File:        MoreCRC.c
  3.  
  4.     Contains:    
  5.  
  6.     Written by:    Pete Gontier
  7.  
  8.     Copyright:    Copyright (c) 1998 Apple Computer, Inc., All Rights Reserved.
  9.  
  10.                 You may incorporate this Apple sample source code into your program(s) without
  11.                 restriction. This Apple sample source code has been provided "AS IS" and the
  12.                 responsibility for its operation is yours. You are not permitted to redistribute
  13.                 this Apple sample source code as "Apple sample source code" after having made
  14.                 changes. If you're going to re-distribute the source, we require that you make
  15.                 it clear in the source that the code was descended from Apple sample source
  16.                 code, but that you've made changes.
  17.  
  18.     Change History (most recent first):
  19.  
  20.          <2>    11/11/98    PCG     fix header
  21.          <1>    11/10/98    PCG     first big re-org at behest of Quinn
  22.  
  23.     Old Change History (most recent first):
  24.  
  25.          <3>     11/9/98    PCG     fix comment 2
  26.          <2>     11/9/98    PCG     add copyright blurb
  27.          <1>     6/16/98    PCG     initial checkin
  28. */
  29.  
  30. /* zlib.h -- interface of the 'zlib' general purpose compression library
  31.   version 1.1.2, March 19th, 1998
  32.  
  33.   Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
  34.  
  35.   This software is provided 'as-is', without any express or implied
  36.   warranty.  In no event will the authors be held liable for any damages
  37.   arising from the use of this software.
  38.  
  39.   Permission is granted to anyone to use this software for any purpose,
  40.   including commercial applications, and to alter it and redistribute it
  41.   freely, subject to the following restrictions:
  42.  
  43.   1. The origin of this software must not be misrepresented; you must not
  44.      claim that you wrote the original software. If you use this software
  45.      in a product, an acknowledgment in the product documentation would be
  46.      appreciated but is not required.
  47.   2. Altered source versions must be plainly marked as such, and must not be
  48.      misrepresented as being the original software.
  49.   3. This notice may not be removed or altered from any source distribution.
  50.  
  51.   Jean-loup Gailly        Mark Adler
  52.   jloup@gzip.org          madler@alumni.caltech.edu
  53.  
  54.  
  55.   The data format used by the zlib library is described by RFCs (Request for
  56.   Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
  57.   (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
  58. */
  59.  
  60.     //
  61.     //    I got mine from: <ftp://ftp.cdrom.com/pub/infozip/zlib/>.
  62.     //
  63.     //    Pursuant to the above: THIS IS AN ALTERED SOURCE VERSION.
  64.     //
  65.  
  66. #include "MoreCRC.h"
  67.  
  68. static UInt32 gTable [256] =
  69. {
  70.     0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
  71.     0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
  72.     0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
  73.     0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
  74.     0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
  75.     0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
  76.     0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
  77.     0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
  78.     0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
  79.     0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
  80.     0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
  81.     0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
  82.     0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
  83.     0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
  84.     0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
  85.     0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
  86.     0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
  87.     0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
  88.     0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
  89.     0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
  90.     0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
  91.     0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
  92.     0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
  93.     0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
  94.     0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
  95.     0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
  96.     0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
  97.     0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
  98.     0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
  99.     0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
  100.     0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
  101.     0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
  102.     0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
  103.     0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
  104.     0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
  105.     0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
  106.     0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
  107.     0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
  108.     0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
  109.     0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
  110.     0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
  111.     0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
  112.     0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
  113.     0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
  114.     0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
  115.     0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
  116.     0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
  117.     0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
  118.     0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
  119.     0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
  120.     0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
  121.     0x2d02ef8dL
  122. };
  123.  
  124. #define DO1(buf) crc = gTable[(crc ^ (*((UInt8*)buf)++)) & 0xff] ^ (crc >> 8)
  125. #define DO2(buf)  DO1(buf); DO1(buf)
  126. #define DO4(buf)  DO2(buf); DO2(buf)
  127. #define DO8(buf)  DO4(buf); DO4(buf)
  128.  
  129. UInt32 MoreCRC32 (UInt32 crc, void *buf, UInt32 len)
  130. {
  131.     if (!MoreAssert (buf)) return 0;
  132.  
  133.     crc = crc ^ 0xffffffffL;
  134.  
  135.     while (len >= 8)
  136.     {
  137.         DO8(buf);
  138.         len -= 8;
  139.     }
  140.  
  141.     if (len) do
  142.     {
  143.         DO1(buf);
  144.     }
  145.     while (--len);
  146.  
  147.     return crc ^ 0xffffffffL;
  148. }
  149.